#ifndef CRYPTSTRING_H
#define CRYPTSTRING_H

#include <QString>
#include <QMap>

class CryptString
{
public:
    CryptString(const QString &data);

    QString generateMD5() const;

private:
    QString _data;
};

class KVQuery
{
public:
    KVQuery();

    void add(const QString &key, const QString &value);

    // 生成url中的参数列表，即各参数+token
    // GET /xsw/api/ptz/control?channelId=1&value=r&speed=67&t=1757934233035&token=xsw%7C0ff774fc7ac469075e39c3a582e868a0 HTTP/1.1
    // 例：上面的channelId=1&value=r&speed=67&t=1757934233035&token=xsw%7C0ff774fc7ac469075e39c3a582e868a0
    QString getParameters();

private:
    void erase(const QString &key);
    void clear();

    // 对参数键值对按key值进行字典序排序后拼接
    // 例：channelId=1&secret=f6fdffe48c908deb0f4c3bd36c032e72&speed=67&t=1757934233035&value=r
    QString getOrderedString() const;

private:
    QMap<QString, QString> _map; // 生成token需按key的字典序排序
};

#endif // CRYPTSTRING_H
